from PIL import Image
import os
import pickle,glob
import binascii
import struct

#filePath = 'C://Users//Administrator//Desktop//Source//指南针优化//'
filePath='.//UI_Output//'
file=os.listdir(filePath)
#file.sort(key=lambda x: int(x.split("_")[1][:-4]))
#file.sort(key=lambda x: int(x[:-4]))
##print(file)
file_num=len(os.listdir(filePath))
print("当前文件夹内图片的个数=%d"%(file_num))#打印文件个数

list =[]  #读取图片数据列表
address_list=[] #保存所有图片的地址

Array=0

#生成bin文件
bin_name ='./UI.bin'
define = "#define"
Address="_ADDRESS"
OFFSET ="_OFFSET"

#offset=0x00182520          #修改此处的偏移地址 从零就是0  
offset=0x00100000         #修改此处的偏移地址 从零就是0  


History_offset=0
#for root, dirs, files in os.walk(filePath, topdown=False):
#for files in os.walk(filePath, topdown=False):    
    #print(root)     # 当前目录路径
    #print(dirs)     # 当前目录下所有子目录
    #print(files)        # 当前路径下所有非目录子文件



#image=Image.open("./Source/2.jpg") ##输入图片文件
for i in range(file_num):
    offset=offset+History_offset;
    image=Image.open(filePath+str(file[i])) ##输入图片文件
#image=Image.open("C://Users//Administrator//Desktop//Source//power//POWER_001.JPG") ##输入图片文件
##data = [image.getpixel((x, y))for x in range(image.width) for y in range(image.height)]
    #print(image.size)  #打印图片大小
    #print(image.format)#打印图片格式
    index=str(file[i])[0:str(file[i]).find(".")]  #返回图片名称
    width,height =image.size
   
    address=define+"  "+index+Address+"                      "+str(hex(offset))+"//宽度*高度*2"+"  "+str(width)+" "+str(height)
    address_list.append(offset)
    History_offset=width*height*2;#
    print(address)
    #size=define+ "  "+index+OFFSET
    #print(size)
    width,height =image.size
    for y in range(0,height):
        for x in range(0,width):
            r,g,b=image.getpixel((x,y))
        #八位转五位
        #px =hex((r>>3)<<11|(g>>2)<<5|b>>3)
            Array=(((r>>3)<<11|(g>>2)<<5|b>>3)>>8)          ##高位字节在前
            list.append((Array))                            ##将数据追加到列表
        #list.insert(x*y*2,Array)
            Array=(( ((r>>3)<<11|(g>>2)<<5|b>>3)>>0) &0xff) ##低位字节在后
            list.append((Array))                            ##将数据追加到列表
        #list.insert(x*y*2+1,Array)
        #out+=px     
        #print(Array)
##      out+=str(px)+ ","       
#print (out)       
#print(list)  ##打印图片列表的数据

    #写入数据到Bin文件内
    binfile= open(bin_name,'wb+')
    for i in  list:
        n = struct.pack('B',i)
        binfile.write(n)
    #print(n)
    binfile.close()


list =[0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,]  #读取图片数据列表

offset=offset+History_offset;
History_offset=0;
print("最后的起始地址",str(hex(offset)))

for i in range(file_num):
    offset=offset+History_offset;
    image=Image.open(filePath+str(file[i])) ##输入图片文件
#image=Image.open("C://Users//Administrator//Desktop//Source//power//POWER_001.JPG") ##输入图片文件
##data = [image.getpixel((x, y))for x in range(image.width) for y in range(image.height)]
    #print(image.size)  #打印图片大小
    #print(image.format)#打印图片格式
    index=str(file[i])[0:str(file[i]).find(".")]  #返回图片名称
    width,height =image.size

    list[0]=((width>>8)&0xff)
    list[1]=(width&0xff)

    list[2]=((height>>8)&0xff)
    list[3]=(height&0xff)



    list[4]=((address_list[i]>>24)&0xff)
    list[5]=((address_list[i]>>16)&0xff)
    list[6]=((address_list[i]>>8)&0xff)
    list[7]=(address_list[i]&0xff)

    
    #list[4]=((offset>>24)&0xff)
    #list[5]=((offset>>16)&0xff)
    #list[6]=((offset>>8)&0xff)
    #list[7]=(offset&0xff)
#追加写入数据到Bin文件内  补充字节到指定的1024*1024 1M地址 保持字节对齐

    binfile= open(bin_name,'ab+')  #wb+ 写入 ab+  追加写入
    for i in range(0,8) :
        n = struct.pack('B',list[i])
        binfile.write(n)
    binfile.close()
    
    address=define+"  "+index+"Image"+Address+"                      "+str(hex(offset))#+"//宽度*高度*2"+"  "+str(width)+" "+str(height)
    print(address)
    #print(list)
    History_offset=8















    

